﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link href="../../../Scripts/easyUI145/themes/icon.css" rel="stylesheet" type="text/css" />
    <link href="../../../Scripts/easyUI145/themes/default/easyui.css" rel="stylesheet"
          type="text/css" />
    <link href="../../../../DataUser/Style/ccbpm.css" rel="stylesheet" type="text/css" />
    <script src="../../../Scripts/easyUI145/jquery.min.js" type="text/javascript"></script>
    <script src="../../../Scripts/easyUI145/jquery.easyui.min.js" type="text/javascript"></script>
    <script src="../../../Scripts/QueryString.js" type="text/javascript"></script>
    <script src="../../../Scripts/config.js" type="text/javascript"></script>
    <script src="../../../Comm/JScript.js" type="text/javascript"></script>
    <script src="../../../Scripts/CommonUnite.js" type="text/javascript"></script>
    <script src="../../../Scripts/EasyUIUtility.js" type="text/javascript"></script>
    <script src="../../../Scripts/QueryString.js" type="text/javascript"></script>
    <script src="../../../Comm/Gener.js" type="text/javascript"></script>
    <script src="DDLBar.js" type="text/javascript"></script>
    <script src="../../CCFlowEnum.js" type="text/javascript"></script>
    <script type="text/javascript">

        var nodeID = 0;
        var fk_flow = "";
        $(function () {

            InitBar(FormSlnType.SDKFormSmart);

            Sln(); //设置权限控制方案.

        });

        //权限控制方案.
        function Sln() {

            var nodeID = GetQueryString("FK_Node");
            var node = new Entity("BP.WF.Node", nodeID);
            //if (node.FormType != FormSlnType.FoolTruck)
            //    return;

            $("#sln").html("正在加载表单方案,请稍后...");

            var html = "<table style='width:95%;'>";
            html + "<tr>";
            html += "<th>节点ID</th>";
            html += "<th>节点名称</th>";
            html += "<th>表单方案</th>";
            html += "<th> 元素 </th>";
            html + "</tr>";

            var nodes = new Entities("BP.WF.Nodes");
            nodes.Retrieve("FK_Flow", node.FK_Flow, "NodeID");

            var currentNode = GetQueryString("FK_Node");

            for (var i = 0; i < nodes.length; i++) {

                var nd = nodes[i];
                if (nd.NodeID == nodeID)
                    continue;

                var sln = new Entity("BP.WF.Template.FoolTruckNodeFrm");
                sln.MyPK = "ND" + nd.NodeID + "_" + currentNode + "_" + nd.FK_Flow;

                if (sln.RetrieveFromDBSources() == 0) {
                    sln.FK_Flow = nd.FK_Flow;
                    sln.FK_Frm = "ND" + nd.NodeID;
                    sln.FK_Node = currentNode; //节点ID.
                    sln.FrmSln = 1; //只读方案.
                    sln.Insert();
                }


                //if (sln.FrmSln == 0) {
                //    html += "<li>[默认]<a href=\"javascript:EditSln('" + sln.MyPK + "')\">" + nd.NodeID + " - " + nd.Name + "</a></li>";
                //    continue;
                //}
                //if (sln.FrmSln == 1) {
                //    html += "<li>[只读]<a href=\"javascript:EditSln('" + sln.MyPK + "')\">" + nd.NodeID + " - " + nd.Name + "</a></li>";
                //    continue;
                //}


                html += "<tr>";
                html += "<td>" + nd.NodeID + "</td>";
                html += "<td><a href=\"javascript:EditSln('" + sln.MyPK + "')\">" + nd.Name + "</a></td>";

                if (sln.FrmSln == 0) {
                    html += "<td>默认</td>";
                }
                if (sln.FrmSln == 1) {
                    html += "<td>只读</td>";
                }

                if (sln.FrmSln == 2) {
                    html += "<td>自定义</td>";
                }

                html += "<td> <a href=\"javascript:DefEle('" + nd.NodeID + "')\" >定义元素（字段）权限</a> </td>";
                html + "</tr>";
                //                html += "<li>[" + sln.FrmSlnText + "]<a href=\"javascript:EditSln('" + sln.MyPK + "')\">" + json.NodeID + " - " + json.Name + "</a> " + def + "</li>";
            }
            html += "</table>";
            $("#sln").html(html);
        }

        function DefEle(nodeID, FK_Flow) {
            var url = "13.SDKFormSmartEles.htm?FK_Flow=" + GetQueryString("FK_Flow") + "&FK_Node=" + nodeID + "&DoType=Field";
            window.open(url);
        }
        function EditSln(mypk) {

            var url = "../../../Comm/EnOnly.htm?EnName=BP.WF.Template.FoolTruckNodeFrm&MyPK=" + mypk;

            OpenEasyUiDialog(url, "eudlgframe", '表单方案', 600, 300, "icon-property", true, null, null, null, function () {
                window.location.href = window.location.href;
            });
        }

        function Save() {
            $("#Btn_Save").val("正在保存...");
            var nodeID = GetQueryString("FK_Node");
            var node = new Entity("BP.WF.Node", nodeID);
            node.FormType = FormSlnType.FoolTruck;
            node.NodeFrmID = "ND" + nodeID;
            node.Update();

            //更新表单类型.
            var frmID = "ND" + nodeID;
            var mapData = new Entity("BP.Sys.MapData", frmID);
            mapData.FrmType = FrmType.FoolForm;
            mapData.Update();


            //执行流程检查.
            var flow = new Entity("BP.WF.Flow", node.FK_Flow);
            flow.DoMethodReturnString("DoCheck");

            $("#Btn_Save").val("保存成功.");
        }


        ///设置该流程的所有节点都是用该方案。
        function SetAllNodeFrmUseThisSln() {

            if (confirm('您确定要设置吗？') == false)
                return;

            var nodeID = GetQueryString("FK_Node");
            var node = new Entity("BP.WF.Node", nodeID);

            var flowNo = node.FK_Flow;
            var nds = new Entities("BP.WF.Nodes");
            nds.Retrieve("FK_Flow", flowNo);

            for (var i = 0; i < nds.length; i++) {

                var jsNode = nds[i];

                var node = new Entity("BP.WF.Node", jsNode);

                node.FormType = FormSlnType.FoolTruck;
                node.NodeFrmID = "ND" + node.NodeID;
                node.Update();


                //更新表单类型.
                var frmID = "ND" + node.NodeID;
                var mapData = new Entity("BP.Sys.MapData", frmID);
                mapData.FrmType = 0; //FormSlnType.FoolTruck;
                mapData.Update();
            }

            //设置显示的主表单,在完成的流程轨迹里可以看到该表单.
            SetNDxxRpt_FrmType(flowNo, 0);

            //执行流程检查.
            var flow = new Entity("BP.WF.Flow", flowNo);
            flow.DoMethodReturnString("DoCheck");

            alert('设置成功.');
            window.location.href = window.location.href;
        }

        function SetDemo() {

            var val = $("#TB_FormURL").val();
            if (val != null) {
                alert('请删除当前值，在设置demo.');
                return;
            }


            $("#TB_FormURL").val("/SDKFlowDemo/SDK/SmartSDKFrm.html");
            $("#TB_FrmTable").val("HR_QingJia");
            $("#TB_FrmPKField").val("WorkID");
        }
    </script>
    <style type="text/css">

        tbGreen {
            color: green;
            font-size: large;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div id="bar">
    </div>

    <fieldset>
        <legend>只能SDK表单绑定url设置 -</legend>
        <br />

        <table style="width:100%; border-color:antiquewhite">
            <tr>
                <td colspan="4" style="width:70%;">
                    请输入URL:
                    <br />
                    <input type="text" style="width:97%;" class="tbGreen" placeholder="请输入SDK表单的URL" value="" id="TB_FormURL" name="TB_FormURL" />
                </td>
            </tr>

            <tr>
                <td>表单业务数据存储的主表: </td>
                <td><input type="text" id="TB_FrmTable" placeholder="比如:HR_QingJia" style="width:98%;" /> </td>
                <td>主表的int类型的主键: </td>
                <td><input type="text" id="TB_FrmPKField" placeholder="比如:WorkID,没有就创建一个" style="width:98%;" /> </td>
            </tr>
            <tr>
                <td colspan="4">
                    <a href="javascript:ShowFWCAttr()"><img src="../../../Img/Components.png" />组件属性</a>
                    -
                    <a href="javascript:SetAllNodeFrmUseThisSln()"> <img src="../../../Img/Setting.png" />设置该流程所有的节点都采用此表单方案</a>
                    -
                    <a href="javascript:SetDemo()">设置演示DEMO</a>

                </td>
            </tr>
        </table>
    </fieldset>


    <fieldset>
        <legend>表单权限控制方案</legend>
        <br />
        <div id="sln">
        </div>
    </fieldset>

    <fieldset>
        <legend>开发步骤</legend>
        <ul>
            <li>0. 首先您需要改造您的表单存储 WorkID 字段，并且作为该流程实例的标识 .</li>
            <li>1. 首先引入/WF/ccbpm.js文件.</li>
            <li>2. 在自己的页面上增加一个ID为ToolBar的div标记流程的控制按钮工具栏的摆放位置.</li>
            <li>3. 如果要引入其他的控件，比如审核组件WorkCheck，评论组件FlowBBS, 需要在增加对应ID的div，以方便ccbpm解析.</li>
            <li>4. 按照约定编写一个Save的方法，该方法返回true,false true=保存成功 false=保存失败. 在工具栏的发送与保存按钮调用,如果保存失败就不能发送.</li>
            <li>5. 工具栏上的按钮是在节点属性上可以控制或者隐藏,比如：退回、移交、加签、轨迹等按钮.</li>

            <li>6. 如果使用绝对路径可以使用ccbpm的全局变量@SDKFromServHost ，比如: @SDKFromServHost/MyFile.htm </li>
            <li>7. 例如:/SDKFlowDemo/SDK/SmartSDKFrm.html , /SDKFlowDemo/SDK/SmartSDKFrm.html</li>
            <li>8. 系统在实际执行的时候，会向您的页面里面传入参数</li>

            <li>8. 比如：SmartSDKFrm.html?WorkID=1223&FK_Node=105&FK_Flow=001&UserNo=zhangsan&SID=xcwwxccsdsdsd</li>
            <li>9. 您可以在您的页面里，接受系统参数进行相关的操作。</li>
            <li>10. 首先接受WorkID作为您的业务表主键，进行数据的保存与读取,也可以使用FK_Node判断当前调用的节点进行相关的界面权限操作.</li>
            <li>11. 其次可以使用FK_Node判断当前调用的节点进行相关的界面元素的权限操作,也可以使用我们系统提供的元素权限控制方案.</li>
        </ul>

        <legend>如何与我的业务表数据结合？</legend>
        <ul>
            <li>1. 系统会向您的页面通过url的方式（ABC.htm?WorkID=xxxxx）传入WorkID参数,它是流程的实例,全局唯一，不重复，可以用它作为您的主键.</li>
            <li>2. 如果您的业务表是以int类型作为主键的，请把workid作为主键存取，如果不是Int类型的主键，请扩展一个int类型的列(例如：WorkID)存取WorkID.</li>
        </ul>


        <legend>如何控制页面元素的权限？</legend>
        <ul>
            <li>11. 其次可以使用FK_Node判断当前调用的节点进行相关的界面元素的权限操作,也可以使用我们系统提供的元素权限控制方案.</li>
        </ul>


        <legend>解释说明</legend>
        <ul>
            <li>1. 如果要在您的业务表单上跑流程，仅仅要做的是把 SmartSDKFrm.js 放入到您的页面里面.  </li>
            <li>2. 系统就会自动生成流程引擎的控制toolbar， toolbar 的按钮权限在节点属性里直接控制.</li>
            <li>3. 您可以充分利用ccbpm的很多组件功能，比如：定位、地图、拍照、附件、评论、写字板、超链接组件等等.</li>
            <!--<li>运行效果图 - <a href="javascript:OpenAPI()">查看发送，退回API接口.</a> </li>-->
            <li><img style=" border:1px;" class="HelpImg" src="SDKFrmSmart.png" /></li>
        </ul>
    </fieldset>
</body>
</html>
